/**
 * 配置模块使用示例
 * 演示如何在应用中使用配置模块
 */

import { config, ConfigUtils, ConfigValidator, initializeConfig } from './index';

// 示例 1: 基本配置使用
export function exampleBasicUsage() {
  console.log('=== 基本配置使用 ===');
  
  // 获取服务器配置
  console.log('服务器端口:', config.server.port);
  console.log('服务器主机:', config.server.host);
  console.log('运行环境:', config.server.environment);
  
  // 获取数据库配置
  console.log('数据库主机:', config.database.host);
  console.log('数据库端口:', config.database.port);
  console.log('数据库名称:', config.database.database);
  
  // 获取JWT配置
  console.log('JWT过期时间:', config.jwt.expiresIn);
  console.log('JWT刷新过期时间:', config.jwt.refreshExpiresIn);
}

// 示例 2: 环境检查
export function exampleEnvironmentCheck() {
  console.log('\n=== 环境检查 ===');
  
  console.log('是否为开发环境:', ConfigUtils.isDevelopment());
  console.log('是否为生产环境:', ConfigUtils.isProduction());
  console.log('是否为测试环境:', ConfigUtils.isTest());
  console.log('当前环境:', ConfigUtils.getEnvironment());
  
  console.log('是否启用调试模式:', ConfigUtils.isDebugEnabled());
  console.log('是否启用Swagger:', ConfigUtils.isSwaggerEnabled());
}

// 示例 3: 配置验证
export function exampleConfigValidation() {
  console.log('\n=== 配置验证 ===');
  
  // 验证所有配置
  const validation = ConfigValidator.validateAll();
  console.log('配置验证结果:', validation.isValid);
  
  if (!validation.isValid) {
    console.log('配置错误:', validation.errors);
  }
  
  // 验证特定配置项
  const portValidation = ConfigValidator.validateConfigItem('PORT', '3000');
  console.log('端口验证结果:', portValidation.isValid);
  
  const jwtValidation = ConfigValidator.validateConfigItem('JWT_SECRET', 'test');
  console.log('JWT密钥验证结果:', jwtValidation.isValid);
  if (!jwtValidation.isValid) {
    console.log('JWT密钥错误:', jwtValidation.error);
  }
}

// 示例 4: 获取配置摘要
export function exampleConfigSummary() {
  console.log('\n=== 配置摘要 ===');
  
  // 获取完整配置摘要
  const summary = ConfigUtils.getConfigSummary();
  console.log('配置摘要:', JSON.stringify(summary, null, 2));
  
  // 获取安全配置（不包含敏感信息）
  const safeConfig = ConfigUtils.getSafeConfig();
  console.log('安全配置:', JSON.stringify(safeConfig, null, 2));
}

// 示例 5: 应用启动配置
export function exampleAppStartup() {
  console.log('\n=== 应用启动配置 ===');
  
  try {
    // 初始化配置
    const appConfig = initializeConfig();
    console.log('配置初始化成功');
    
    // 验证配置
    const validation = ConfigUtils.validateConfig();
    if (!validation.isValid) {
      throw new Error(`配置验证失败: ${validation.errors.join(', ')}`);
    }
    
    // 记录配置摘要
    console.log('应用配置:', ConfigUtils.getSafeConfig());
    
    // 根据环境执行不同操作
    if (ConfigUtils.isDevelopment()) {
      console.log('🔧 开发模式配置已应用');
    } else if (ConfigUtils.isProduction()) {
      console.log('🚀 生产模式配置已应用');
    } else if (ConfigUtils.isTest()) {
      console.log('🧪 测试模式配置已应用');
    }
    
    return appConfig;
  } catch (error) {
    console.error('配置初始化失败:', error);
    process.exit(1);
  }
}

// 示例 6: 中间件配置
export function exampleMiddlewareConfig() {
  console.log('\n=== 中间件配置 ===');
  
  // CORS 配置
  const corsConfig = {
    origin: config.server.corsOrigin,
    credentials: true
  };
  console.log('CORS配置:', corsConfig);
  
  // 限流配置
  const rateLimitConfig = ConfigUtils.getRateLimitConfig();
  console.log('限流配置:', rateLimitConfig);
  
  // 安全配置
  const bcryptRounds = ConfigUtils.getBcryptRounds();
  const sessionTimeout = ConfigUtils.getSessionTimeout();
  const maxLoginAttempts = ConfigUtils.getMaxLoginAttempts();
  
  console.log('密码加密轮数:', bcryptRounds);
  console.log('会话超时时间:', sessionTimeout, '秒');
  console.log('最大登录尝试次数:', maxLoginAttempts);
}

// 运行所有示例
export function runAllExamples() {
  console.log('🚀 开始运行配置模块示例...\n');
  
  exampleBasicUsage();
  exampleEnvironmentCheck();
  exampleConfigValidation();
  exampleConfigSummary();
  exampleAppStartup();
  exampleMiddlewareConfig();
  
  console.log('\n✅ 所有示例运行完成！');
}

// 如果直接运行此文件
if (require.main === module) {
  runAllExamples();
} 